﻿using BarManager.Core.DomainModel;
using BarManager.Core.DomainService;
using BarManager.Core.Entity;
using System.Linq;

namespace BarManager.Infrastructure.Data.Repository
{
    public class OrdenRepository : BaseRepository<Orden>, IOrdenRepository
    {
        private IOrdenDetalleRepository OrdenDetalleRepository { get; set; }
        
        public OrdenRepository(IObjectContext context, IOrdenDetalleRepository ordenDetalleRepository)
            : base(context)
        {
            this.OrdenDetalleRepository = ordenDetalleRepository;        
        }

        public override void Add(Orden entity)
        {
            //- Add Master
            Orden cabecera = new Orden
            {
                EmpleadoId = entity.EmpleadoId,
                Estado = entity.Estado,
                FechaCreacion = entity.FechaCreacion,
                MesaId = entity.MesaId
            };
            base.Add(cabecera);

            //- Add Details         
            foreach (var item in entity.Detalle)
            {
                OrdenDetalleBase detalle = null;
                if (item is OrdenDetalleProducto)
                {
                    detalle = new OrdenDetalleProducto
                    {
                        Cantidad = item.Cantidad,
                        CantidadPagada = item.CantidadPagada,
                        CantidadRegalada = item.CantidadRegalada,
                        FechaPedido = item.FechaPedido,
                        FechaEntrega = item.FechaEntrega,
                        Estado = item.Estado,
                        ProductoId = (item as OrdenDetalleProducto).ProductoId,
                        OrdenId = cabecera.Id,
                        Orden = cabecera,
                        Id = item.Id
                    };
                }
                else
                {
                    detalle = new OrdenDetallePromocion
                    {
                        Cantidad = item.Cantidad,
                        CantidadPagada = item.CantidadPagada,
                        CantidadRegalada = item.CantidadRegalada,
                        FechaPedido = item.FechaPedido,
                        FechaEntrega = item.FechaEntrega,
                        Estado = item.Estado,
                        PromocionId = (item as OrdenDetallePromocion).PromocionId,
                        OrdenId = cabecera.Id,
                        Orden = cabecera,
                        Id = item.Id
                    };
                }
                OrdenDetalleRepository.Add(detalle);
            }
        }        
    }
}
